<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    var splitIntoFibonacci = function (S) {
      const ans = []
      backtrack(S, ans, 0);
      return ans
    };
    function backtrack(s, ans, start) {
      // 边界条件判断，如果截取完了，并且res长度大于等于3，表示找到了一个组合。
      if (start === s.length) return ans.length >= 3

      for (let i = start; i < s.length; i++) {
        //两位以上的数字不能以0开头
        if (i > start && s[start] === '0') break

        let num = +s.slice(start, i + 1)

        if (num > 2 ** 31) break

        let len = ans.length

        //如果截取的数字大于res中前两个数字的和，说明这次截取的太大，直接终止，因为后面越截取越大
        if (len >= 2 && num > ans[len - 1] + ans[len - 2]) break

        if (len <= 1 || num == ans[len - 1] + ans[len - 2]) {
          ans.push(num)
          if (backtrack(s, ans, i + 1)) return true
          ans.pop()
        }

      }
    }
    console.log(splitIntoFibonacci("1101111"));
  </script>
</body>

</html>